// srqwait.cpp : Defines the entry point for the console application. // #include #include #include #include "visa.h" int main(int argc, char* argv[]) { ViSession rm, vi; ViStatus status; char string[256]; ViUInt32 retCnt; int i; ViUInt16 stb; ViEventType eventType = 0; ViEvent context = 0; status = viOpenDefaultRM(&rm); if (status < VI_SUCCESS) goto error; status = viOpen(rm, "GPIB8::1::INSTR", NULL, NULL, &vi); if (status < VI_SUCCESS) goto error; status = viEnableEvent(vi, VI_EVENT_SERVICE_REQ, VI_QUEUE, VI_NULL); if (status < VI_SUCCESS) goto error; // Setup instrument status = viWrite(vi, (ViBuf) ":DATA:ENCDG RIBINARY;SOURCE CH1;START 1;STOP 500;WIDTH 2", 56, &retCnt); if (status < VI_SUCCESS) goto error; status = viWrite(vi, (ViBuf) ":ACQUIRE:STOPAFTER SEQUENCE;REPET 0;STATE 0;MODE SAMPLE", 55, &retCnt); if (status < VI_SUCCESS) goto error; status = viWrite(vi, (ViBuf) "DESE 1;*ESE 1;*SRE 32", 21, &retCnt); if (status < VI_SUCCESS) goto error; // Do cause some srqs for (i = 0; i < 100; i++) { status = viWrite(vi, (ViBuf) "*CLS", 4, &retCnt); if (status < VI_SUCCESS) goto error; status = viWrite(vi, (ViBuf) ":ACQUIRE:STATE 1", 16, &retCnt); if (status < VI_SUCCESS) goto error; status = viWrite(vi, (ViBuf) "*OPC", 4, &retCnt); if (status < VI_SUCCESS) goto error; status = viWaitOnEvent(vi, VI_EVENT_SERVICE_REQ, 5000, &eventType, &context); if (status >= VI_SUCCESS) { printf("(%d) Received SRQ\n", i); viClose(context); } else { viStatusDesc(vi, status, string); printf("(%d) viWaitOnEvent Failed - \"%s\"\n", string); } viReadSTB(vi, &stb); } // Cleanup and exit status = viDisableEvent(vi, VI_EVENT_SERVICE_REQ, VI_QUEUE); if (status < VI_SUCCESS) goto error; viClose(vi); viClose(rm); return 0; error: viStatusDesc(rm, status, string); fprintf(stderr, "Error: %s\n", (ViBuf) string); return 0; }